package com.snk.door.enums;

/**
 * 刷卡记录
 */
public enum CardRecord {
    /**
     * 合法开门
     */
    TYPE_1(1, "合法开门"),

    /**
     * 密码开门
     */
    TYPE_2(2, "密码开门"),

    /**
     * 卡加密码
     */
    TYPE_3(3, "卡加密码"),

    /**
     * 手动输入卡加密码
     */
    TYPE_4(4, "手动输入卡加密码"),

    /**
     * 首卡开门
     */
    TYPE_5(5, "首卡开门"),

    /**
     * 门常开 --- 常开工作方式中，刷卡进入常开状态
     */
    TYPE_6(6, "门常开"),

    /**
     * 多卡开门 -- 多卡验证组合完毕后触发
     */
    TYPE_7(7, "多卡开门"),

    /**
     * 重复读卡
     */
    TYPE_8(8, "重复读卡"),

    /**
     * 有效期过期
     */
    TYPE_9(9, "有效期过期"),

    /**
     * 开门时段过期
     */
    TYPE_10(10, "开门时段过期"),

    /**
     * 节假日无效
     */
    TYPE_11(11, "节假日无效"),

    /**
     * 未注册卡
     */
    TYPE_12(12, "未注册卡"),

    /**
     * 巡更卡 -- 不开门
     */
    TYPE_13(13, "巡更卡"),

    /**
     * 探测锁定
     */
    TYPE_14(14, "探测锁定"),

    /**
     * 无有效次数
     */
    TYPE_15(15, "无有效次数"),

    /**
     * 防潜回
     */
    TYPE_16(16, "防潜回"),

    /**
     * 密码错误------------卡号为错误密码
     */
    TYPE_17(17, "密码错误"),

    /**
     * 密码加卡模式密码错误----卡号为卡号
     */
    TYPE_18(18, "密码加卡模式密码错误"),

    /**
     * 锁定时(读卡)或(读卡加密码)开门
     */
    TYPE_19(19, "锁定时(读卡)或(读卡加密码)开门"),

    /**
     * 锁定时(密码开门)
     */
    TYPE_20(20, "锁定时(密码开门)"),

    /**
     * 首卡未开门
     */
    TYPE_21(21, "首卡未开门"),

    /**
     * 挂失卡
     */
    TYPE_22(22, "挂失卡"),

    /**
     * 挂失卡
     */
    TYPE_23(23, "黑名单卡"),

    /**
     * 门内上限已满，禁止入门
     */
    TYPE_24(24, "门内上限已满，禁止入门"),

    /**
     * 开启防盗布防状态(设置卡)
     */
    TYPE_25(25, "开启防盗布防状态(设置卡)"),

    /**
     * 撤销防盗布防状态(设置卡)
     */
    TYPE_26(26, "撤销防盗布防状态(设置卡)"),

    /**
     * 开启防盗布防状态(密码)
     */
    TYPE_27(27, "开启防盗布防状态(密码)"),

    /**
     * 撤销防盗布防状态(密码)
     */
    TYPE_28(28, "撤销防盗布防状态(密码)"),

    /**
     * 互锁时(读卡)或(读卡加密码)开门
     */
    TYPE_29(29, "互锁时(读卡)或(读卡加密码)开门"),

    /**
     * 互锁时(密码开门)
     */
    TYPE_30(30, "互锁时(密码开门)"),

    /**
     * 全卡开门
     */
    TYPE_31(31, "全卡开门"),

    /**
     * 多卡开门--等待下张卡
     */
    TYPE_32(32, "多卡开门-等待下张卡"),

    /**
     * 多卡开门--组合错误
     */
    TYPE_33(33, "多卡开门-组合错误"),

    /**
     * 非首卡时段刷卡无效
     */
    TYPE_34(34, "非首卡时段刷卡无效"),

    /**
     * 非首卡时段密码无效
     */
    TYPE_35(35, "非首卡时段密码无效"),

    /**
     * 禁止刷卡开门 -- 【开门认证方式】验证模式中禁用了刷卡开门时
     */
    TYPE_36(36, "禁止刷卡开门"),

    /**
     * 禁止密码开门 -- 【开门认证方式】验证模式中禁用了密码开门时
     */
    TYPE_37(37, "禁止密码开门"),

    /**
     * 门内已刷卡，等待门外刷卡。（门内外刷卡验证）
     */
    TYPE_38(38, "门内已刷卡，等待门外刷卡"),

    /**
     * 门外已刷卡，等待门内刷卡。（门内外刷卡验证）
     */
    TYPE_39(39, "门外已刷卡，等待门内刷卡"),

    /**
     * 请刷管理卡(在开启管理卡功能后提示)(电梯板)
     */
    TYPE_40(40, "请刷管理卡"),

    /**
     * 请刷普通卡(在开启管理卡功能后提示)(电梯板)
     */
    TYPE_41(41, "请刷普通卡"),

    /**
     * 首卡未读卡时禁止密码开门
     */
    TYPE_42(42, "首卡未读卡时禁止密码开门"),

    /**
     * 控制器已过期_刷卡
     */
    TYPE_43(43, "控制器已过期-刷卡"),

    /**
     * 控制器已过期_密码
     */
    TYPE_44(44, "控制器已过期-密码"),

    /**
     * 合法卡开门—有效期即将过期
     */
    TYPE_45(45, "合法卡开门—有效期即将过期"),

    /**
     * 拒绝开门--区域反潜回失去主机连接
     */
    TYPE_46(46, "拒绝开门-区域反潜回失去主机连接"),

    /**
     * 拒绝开门--区域互锁，失去主机连接
     */
    TYPE_47(47, "拒绝开门-区域互锁，失去主机连接"),

    /**
     * 区域防潜回--拒绝开门
     */
    TYPE_48(48, "区域防潜回-拒绝开门"),

    /**
     * 区域互锁--有门未关好，拒绝开门
     */
    TYPE_49(49, "区域互锁-有门未关好，拒绝开门");

    private Integer value;

    private String comment;

    CardRecord(Integer value, String comment) {
        this.value = value;
        this.comment = comment;
    }

    public Integer getValue() {
        return this.value;
    }

    public String getComment() {
        return comment;
    }

    public static CardRecord getCardRecord(Short value) {
        for (CardRecord cardRecord : CardRecord.values()) {
            if (cardRecord.getValue().equals(Integer.valueOf(value))) {
                return cardRecord;
            }
        }
        return null;
    }

    public static String getComment(Short value) {
        for (CardRecord cardRecord : CardRecord.values()) {
            if (cardRecord.getValue().equals(Integer.valueOf(value))) {
                return cardRecord.getComment();
            }
        }
        return null;
    }
}
